/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package dao.basedato;

import beans.BeanUsuario;
import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.Statement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.logging.Level;
import java.util.logging.Logger;
import utilitarios.Fechas;

/**
 *
 * @author vyamunaque
 */
public class DaoUsuario {

    private ArrayList usuarios;

    public static BeanUsuario consultarUsuario(String strUsuario, String strPassword) {
        BeanUsuario bUsuario = null;
        try {
            Conexion cnx = new Conexion();
            Connection con = cnx.getConexion();
            Statement st = con.createStatement();
            Fechas fechas = new Fechas();
            String fchActual = fechas.fechaActual();
            ResultSet rs = st.executeQuery("select u.*,r.DESCRIPCIONROL from USUARIOS as u left join ROLES as r on u.IDROL=r.IDROL where CODIGOUSUARIO='" + strUsuario + "' and CONTRASENA='" + strPassword + "' and u.VALIDOHASTA>=date('" + fchActual + "')");
            /*
             String selectStatement = "select * " + "from USUARIOS";
             PreparedStatement prepStmt = con.prepareStatement(selectStatement);
             ResultSet rs = prepStmt.executeQuery();
             */
            while (rs.next()) {
                bUsuario =
                        new BeanUsuario(rs.getInt(1), rs.getString(2),
                        rs.getString(3), rs.getString(4), rs.getString(5),
                        rs.getString(6), rs.getDate(7), rs.getInt(8), rs.getString(9));
                rs.close();
                st.close();
            }
        } catch (SQLException se) {
            se.printStackTrace();
        } catch (Exception ex) {
            Logger.getLogger(DaoUsuario.class.getName()).log(Level.SEVERE, null, ex);
        }
        return bUsuario;
    }

    public static boolean insertarUsuario(BeanUsuario dbUsuario) throws Exception {
        boolean resultado = false;
        try {
            Conexion cnx = new Conexion();
            Connection con = cnx.getConexion();
            String insertStatement = "INSERT INTO USUARIOS values(?,?,?,?,?,?,?,?)";
            PreparedStatement pst = con.prepareStatement(insertStatement);
            pst.setInt(1, dbUsuario.getIdusuario());
            pst.setString(2, dbUsuario.getCodigo());
            pst.setString(3, dbUsuario.getContrasena());
            pst.setString(4, dbUsuario.getNombre());
            pst.setString(5, dbUsuario.getApellidos());
            pst.setString(6, dbUsuario.getCorreo());
            pst.setDate(7, (Date) dbUsuario.getVencimiento());
            pst.setInt(8, dbUsuario.getNivelAcceso());
            pst.execute();
            pst.close();
            resultado = true;

        } catch (SQLException se) {
            throw new Exception(se.getMessage());
        }
        return resultado;
    }

    public ArrayList getUsuarios() throws Exception {
        usuarios = new ArrayList();

        try {
            Conexion cnx = new Conexion();
            Connection con = cnx.getConexion();
            String selectStatement = "u.*,r.DESCRIPCIONROL from USUARIOS as u left join ROLES as r on u.IDROL=r.IDROL";
            PreparedStatement prepStmt = con.prepareStatement(selectStatement);
            ResultSet rs = prepStmt.executeQuery();

            while (rs.next()) {
                BeanUsuario bd =
                        new BeanUsuario(rs.getInt(1), rs.getString(2),
                        rs.getString(3), rs.getString(4), rs.getString(5),
                        rs.getString(6), rs.getDate(7), rs.getInt(8), rs.getString(9));
                if (rs.getInt(8) > 0) {
                    usuarios.add(bd);
                }
            }

            prepStmt.close();
        } catch (SQLException ex) {
            throw new Exception(ex.getMessage());
        }
        Collections.sort(usuarios);

        return usuarios;
    }

    public BeanUsuario detalleUsuario(int userId) throws Exception {
        try {
            Conexion cnx = new Conexion();
            Connection con = cnx.getConexion();
            String selectStatement = "select u.*,r.DESCRIPCIONROL from USUARIOS as u left join ROLES as r on u.IDROL=r.IDROL where idUsuarios = ? ";
            PreparedStatement prepStmt = con.prepareStatement(selectStatement);
            prepStmt.setInt(1, userId);
            ResultSet rs = prepStmt.executeQuery();

            if (rs.next()) {
                BeanUsuario bd =
                        new BeanUsuario(rs.getInt(1), rs.getString(2),
                        rs.getString(3), rs.getString(4), rs.getString(5),
                        rs.getString(6), rs.getDate(7), rs.getInt(8), rs.getString(9));
                prepStmt.close();
                return bd;
            } else {
                prepStmt.close();
                throw new Exception("No encontro usuario identificado con ID: " + userId);
            }
        } catch (SQLException ex) {
            System.err.println(ex.getMessage());
            throw new Exception("No encontro usuario identificado con ID: " + userId + " " + ex.getMessage());
        }
    }
}
